package com.itheima.text01;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;


public class Demo06 {
    //随机点名器最复杂版本，有效姓名在当前模块下的names.txt文件
    public static void main(String[] args) throws IOException {

        //先将学生信息读取到内存中
        BufferedReader br = new BufferedReader(new FileReader("D:\\JavaCode\\PROJECT\\HeimaJava2\\myiotest\\src\\com\\itheima\\text01\\names.txt"));
        ArrayList<Student> list = new ArrayList<>();
        String line;
        //将读取到的数据存入对象，将对象存入到集合中
        while ((line = br.readLine()) != null) {
            String[] StuInfo = line.split("-");//每个学生信息进行切割
            Student stu = new Student(StuInfo[0], StuInfo[1], Integer.parseInt(StuInfo[2]), Double.parseDouble(StuInfo[3]));
            list.add(stu);
        }
        br.close();

        //计算集合中权重的总和
        double weight = 0;
        //遍历每一个对象获取其中的权重
        for (Student str : list) {
            weight += weight + str.getWeight();
        }

        //计算出每个权重的占比
        double[] arr = new double[list.size()];
        int index = 0;
        for (Student stu : list) {
            arr[index] = stu.getWeight() / weight;
            index++;
        }
        //给定每个学生占比所在的范围
        for (int i = 1; i < arr.length; i++) {
            arr[i] = arr[i] + arr[i - 1];
        }
        //System.out.println(Arrays.toString(arr));
        //随机获取抽到的范围，判断是哪一个学生对象
        //获取一个0.0-1.0的随机数
        double number = Math.random();
        //获取当前学生的信息，并修改其中的权重为原来的1/2
        //在arr数组中找到number所在的插入点使用binarySearch会返回结果=-插入点-1->插入点=-结果-1
        int result = -Arrays.binarySearch(arr, number) - 1;
        Student tempStu = list.get(result);
        System.out.println(tempStu);

        //修改当前学生的权重
        double v = tempStu.getWeight() / 2;
        tempStu.setWeight(v);

        //将修改后的权重重新写入文件中
        BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\JavaCode\\PROJECT\\HeimaJava2\\myiotest\\src\\com\\itheima\\text01\\names.txt"));
        for (Student str : list) {
            bw.write(str.toString());
            bw.newLine();
        }
        bw.close();

    }
}
